PHP DAL Testen
In deze les testen we de PHP DAL klasse uit. Terzelfdertijd gebruiken we hiervoor de Threepenny (PHP ThreepennyMVC). Als voorbeeld nemen we de EventCategory tabel van het Fric-frac project.
Voorbereiding
- Het data/config.ini bestand:
[local] database = "Cursist13" username = root password = root host = 127.0.0.1 port = 3306 driver = mysql [global] database = Docent1 username = Docent1 password = XXXXXXXXXXX host = xxx.xxx.xxx.xxx port = 3306 driver = mysql
- De tabellen maken
De SQL script vind je in data/sqlscripts/fric-frac-ddl.sql. Vervang de databasename door je eigen databasename. -
Data inserten
EventCategory en EventTopic met data vullen: Fric-frac MySQL insert data in EventCategory - EventTopic - index.php
- We moeten de volgende nieuwe bestanden insluiten in het index.php bestand:
- Controllers/EventCategoryControler.php
- vendor/anormapart/Dal.php
- vendor/anormapart/Helpers.ph
p
- Voeg de juiste url toe in de hamburger link
- de volledige pagina:
<?php // var_dump($_SERVER); use ThreepennyMVC\FrontController; include ('../vendor/threepennymvc/FrontController.php'); include ('../vendor/threepennymvc/Controller.php'); include ('../vendor/anormapart/Dal.php'); include ('../vendor/anormapart/Helpers.php'); include ('Controllers/AdminController.php'); include ('Controllers/EventCategoryController.php'); $route = FrontController::getRouteData($_SERVER['REQUEST_URI'], 'Fricfrac', 'Admin', 'index'); $view = FrontController::dispatch($route); ?> <!DOCTYPE html> <html lang="nl"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" type="text/css" href="/css/app.css"> <link rel="stylesheet" type="text/css" href="/css/icon-font.css"> <title>Fric-frac events</title> </head> <body class="page"> <header class="page-header"> <nav class="control-panel"> <a href="/Admin/index" class="tile"> <span class="icon-menu"></span> <span class="screen-reader-text">Admin index</span> </a> </nav> <h1 class="banner">Fric-frac</h1> </header> <?php echo $view(); ?> <footer class="page-footer"> <p>© ModernWays 2020</p> <p>Opdracht Programmeren 4</p> </footer> </body> </html>
- We moeten de volgende nieuwe bestanden insluiten in het index.php bestand:
- De views aanpassen
- De view met de naam Views/EventCategory/Index.php aanpassen. We passen de url aan en tonen de
message
waarde uit het model:<section class="show-room entity"> <div class="detail"> <nav class="command-panel"> <h2 class="banner">EventCategory</h2> <a href="/EventCategory/InsertingOne" class="tile"> <span class="icon-plus"></span> <span class="screen-reader-text">InsertingOne</span> </a> </nav> <fieldset></fieldset> <div class="feedback"> <p><?php echo $model['message']; ?></p> <p><?php echo isset($model['error']) ? $model['error'] : ''; ?></p> </div> </div> <?php include('ReadingAll.php'); ?> </section>
- De view Views/EventCategory/Index.php gebruikt de Views/EventCategory/ReadingAll.php view. Eerst kijken we of er iets in het
list
attribuut van de$model
array zit. Daar moeten we door hetlist
attribuut van de$model
associatieve array lopen om de alle rijen in deEventCategory
tabel te tonen:<aside class="list"> <?php if ($model['list']) { ?> <table> <tr> <th></th> <th>Naam</th> </tr> <?php foreach($model['list'] as $item) { ?> <tr> <td> <a class='tile' href="/Event/readingOne/<?php echo $item['Id'];?>"> <span class="icon-arrow-right"></span> <span class="screen-reader-text">ReadingOne</span></a> </td> <td><?php echo $item['Name'];?></td> </tr> <?php } ?> </table> <?php } else { ?> <p>Geen rijen gevonden in EventCategory tabel.</p> <?php } ?> </aside>
- Om de juiste controllermethoden op te roepen moeten we de url's in de Views/Admin/Index.php pagina aanpassen:
<h1><?php echo $model['title']; ?></h1> <article class="index"> <a class="tile" href="/EventCategory/Index"> <span aria-hidden="true" class="icon-bookmark"></span> <span class="screen-reader-text">Event Category</span> Event Category </a> <a class="tile" href="EventTopic/Index"> <span aria-hidden="true" class="icon-price-tag"></span> <span class="screen-reader-text">Event Topic</span> Event Topic</a> <a class="tile" href="Event/Index"> <span aria-hidden="true" class="icon-power"></span> <span class="screen-reader-text">Event</span> Event Index</a> <div class="tile _2x1">Informatieve tegel</div> </article>
- De EventCategory/InsertingOne.php view aanpassen
Pas hetaction
attribuut van de Insert One knop in hetform
element aan en hethref
attribuut van de Annuleren link:<section class="show-room entity"> <form id="form" method="post" action="/EventCategory/createOne" class="detail"> <nav class="command-panel"> <h2 class="banner">EventCategory</h2> <button type="submit" value="insert" name="uc" class='tile'> <span class="icon-floppy-disk"></span> <span class="screen-reader-text">Insert One</span> </button> <a href="/EventCategory/Index" class="tile"> <span class="icon-cross"></span> <span class="screen-reader-text">Annuleren</span> </a> </nav> <fieldset> <div> <label for="Name">Naam</label> <input type="text" required id="Name" name="Name" /> </div> </fieldset> <div class="feedback"> <p><?php echo $model['message']; ?></p> <p><?php echo isset($model['error']) ? $model['error'] : ''; ?></p> </div> </form> <?php include('ReadingAll.php'); ?> </section>
- De view met de naam Views/EventCategory/Index.php aanpassen. We passen de url aan en tonen de
De controllerklasse uitproberen
- Een controllerklasse maken om de Dal klasse te testen:
- in een bestand met de naam Controllers/EventCategoryController.php:
<?php /** * Created by ModernWays * User: Jef Inghelbrecht * Date: 3/04/2020 * Time: 13:32 */ namespace Fricfrac\Controllers; class EventCategoryController extends \ThreepennyMVC\Controller { ... }
- de
index
methode- De methode index toevoegen om toegang te krijgen tot de
EventCategory
tabel. In de view moet rechts een lijst van alle rijen staan. We vullen het model met alle rijen uit de tabelEventCategory
. We gebruiken daarvoor deReadAll
static methode deDal
klasse. Ook de melding die deDal::ReadAll
methode gemaakt heeft stoppen we in het model. Die wordt in de Views/EventCategory/Index.php de view gebruikt:public function index() { $model['list'] = \AnOrmApart\Dal::readAll('EventCategory'); $model['message'] = \AnOrmApart\Dal::getMessage(); return $this->view($model); }
- ga via Admin/Index naar de EventCategory/Index of typ in de url http://localhost:63346/EventCategory/Index:
- Resultaat:
- De methode index toevoegen om toegang te krijgen tot de
- Create
Dat zijn twee use cases. Eerst het formulier InsertingOne tonen en dan indien gewenst een nieuwe rij in de tabel toevoegen.- CreateOne
De methodecreateOne
toevoegen om 1 rij in de tabelEventCategory
toevoegen. Deze retourneert de view die we hierboven gemaakt hebben. Vermits de naam van de view niet overeenkomt met de naam van de methode van de controller moeten we het pad als argument meegeven. Het model bevat hier enkel de feedback van decreate
methode van de Dal en de naam van de tabel:/** * Created by ModernWays * User: Jef Inghelbrecht * Date: 11/04/2019 * Time: 10:32 */ namespace ModernWays\Controllers; class EventCategoryTestController extends \ModernWays\Controller { public function createOne() { $model = array('tableName' => 'EventCategory', 'error' => 'Geen'); $eventCategory = array ( "Name" => $_POST['Name']; if (\AnOrmApart\Dal::create('EventCategory', $eventCategory, 'Name')) { $model['message'] = "Rij toegevoegd! {$eventCategory['Name']} is toegevoegd aan EventCategory"; } else { $model['message'] = "Oeps er is iets fout gelopen! Kan {$eventCategory['Name']} niet toevoegen aan EventCategory"; $model['error'] = \AnOrmApart\Dal::getMessage(); } return $this->view($model, 'Views/EventCateory/Index.php'); } }
- InsertingOne
De methode die het model vult en de view oproept stopt de waarden, die door de gebruiker in het formulier werden ingetypt, in een array. Die wordt samen met de tabelnaam en de kolomnaam aan decreate
methode van deDal
klasse doorgegeven. Dan wordt de$model
array gevuld voor de EventCategory/Index.php view:public function insertingOne() { $model['list'] = \AnOrmApart\Dal::readAll('EventCategory'); $model['message'] = \AnOrmApart\Dal::getMessage(); return $this->view($model); }
- Uitproberen
ga via Admin/Index naar de EventCategory/Index of typ in de url http://localhost:63346/EventCategory/InsertingOne: Klik op de save knop om de rij te voegen. We keren terug naar de EventCategory/InsertingOne.php view en de we zijn rechts dat de rij is toegevoegd:
- CreateOne
- in een bestand met de naam Controllers/EventCategoryController.php:
2020-04-22 10:52:26